/**
 * Description:
 * Class Name:URLClassLoaderTest
 * Date:2022/4/29 17:52
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第18章_类加载机制与反射._18_2_类加载器._18_2_3_URLClassLoader类;

import java.net.URL;
import java.net.URLClassLoader;
import java.sql.Connection;
import java.sql.Driver;
import java.util.Properties;

public class URLClassLoaderTest {
    private static Connection connection;

    // 定义一个数据库连接的方法
    public static Connection getConnection(String url, String user, String pwd) throws Exception{
        if (connection == null){
            // 创建一个URL数组
            URL[] urls = {new URL("file:mysql-connector-java-8.0.28.jar")};

            // 以默认的ClassLoader作为父ClassLoader，创建URLClassLoader
            var myClassLoader = new URLClassLoader(urls);
            // 加载MySQL的JDBC驱动，并创建默认实例
            var driver = (Driver) myClassLoader.loadClass("com.mysql.cj.jdbc.Driver").getConstructor().newInstance();
            // 创建一个设置JDBC连接属性的Properties对象
            var props = new Properties();
            // 至少需要为该对象传入user和pwd两个属性
            props.setProperty("user", user);
            props.setProperty("password", pwd);
            // 调用Driver对象的connect方法来取得数据库连接
            connection = driver.connect(url, props);
        }
        return connection;
    }

    public static void main(String[] args) throws Exception{
        String string_url = "jdbc:mysql://localhost:3306";
        System.out.println(getConnection(string_url, "root", ""));		// 密码我已抹去
    }
}
//com.mysql.cj.jdbc.ConnectionImpl@4c371370